/**
 * @param {TreeNode} root
 * @return {number}
 */
var diameterOfBinaryTree = function (root) {
  let maxDiameter = 0 //全局最大直径

  //定义求节点最大深度的函数
  function depth(node) {
    //如果是空节点，给父节点返回0
    if (!node) return 0
    //递归计算当前节点左右子树的最大深度
    let leftDepth = depth(node.left)
    let rightDepth = depth(node.right)
    //如果局部最大直径（当前节点左右子树的深度和）大于全局最大直径，则更新全局最大直径
    maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth)
    //给父节点返回当前节点的左右子树的最大深度（二选一）+1
    return Math.max(leftDepth, rightDepth) + 1
  }

  //调用求节点最大深度的函数，传入根节点
  depth(root)

  return maxDiameter
};